package com.eagle.concurrency.example.publishobj;

import com.eagle.concurrency.annoations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@NotThreadSafe
public class VariableEscape {
	private String innerParam = "init value";

	public VariableEscape() {
		new InnerClass();
	}

	class InnerClass{
		private InnerClass() {
			/**
			 * this指的是当前正在访问这段代码的对象,当在内部类中使用this指的就是内部类的对象,
			 * 为了访问外层类对象,就可以使用外层类名.this来访问,一般也只在这种情况下使用这种
			 * 形式
			 */
			VariableEscape.this.innerParam = "value change";
		}
	}
	//VariableEscape对象构造还没有完成，就改变了里面的变量，导致变量逃逸
	public static void main(String[] args) {
		VariableEscape demo = new VariableEscape();
		log.info("The inner param already changed -> {}",demo.innerParam);
	}
}
